Node3D 插件示例

示例展示了如何在 Kanzi Studio 中创建自定义的 3D 节点以及如何使用该节点。Kanzi 示例包含 Visual Studio 解决方案,它定义用于定义自定义节点的 Kanzi Engine 插件的 .dll;还包含一个 Kanzi Studio 工程,它使用插件系统在 Kanzi Studio 预览 (Preview) 中应用自定义节点中定义的行为。

您可以在 <KanziWorkspace>/Examples/Node3D_plugin 目录中找到本示例。

要了解如何创建Kanzi Engine 插件,请参阅创建 Kanzi Engine 插件

创建自定义节点

示例中的两个自定义节点为:

Kanzi Studio 从插件 dll 中读取自定义节点使用的消息和属性类型的相关信息。

Kanzi Engine 使用插件中的签名调用一个函数,以注册插件

extern "C"
{
    __declspec(dllexport) Module* createModule(uint32_t kanziVersionMajor, uint32_t kanziVersionMinor);
}

旋钮 (Knob) 和转盘 (Spinner) 节点在您创建并由 createModule() 函数返回的模块中定义的 getMetaclassesOverride() 函数中注册。

为了注册转盘 (Spinner) 节点,转盘 (Spinner) 必须包含一个元类。通过使用 KZ_METACLASS_BEGIN,您定义自定义节点并声明:

    KZ_METACLASS_BEGIN(Spinner, Node3D, "Spinner")
        KZ_METACLASS_MESSAGE_TYPE(SpinnerUpdateLevelMessage)
        KZ_METACLASS_PROPERTY_TYPE(TextBlockProperty)
    KZ_METACLASS_END()

在本示例中,转盘 (Spinner) 创建其消息类型 SpinnerUpdateLevelMessage,指定其使用 SpinnerUpdateLevelMessageArguments

MessageType<Spinner::SpinnerUpdateLevelMessageArguments> Spinner::SpinnerUpdateLevelMessage(kzMakeFixedString("Message.Spinner.UpdateLevel"),
                                                                                            KZ_DECLARE_EDITOR_METADATA
                                                                                            (
                                                                                                //将消息名称设置为 Kanzi Studio 中显示的方式。
                                                                                                metadata.displayName = "Update Spinner Level";
                                                                                                //设置消息的工具提示。
                                                                                                metadata.tooltip = "Updates the Spinner level and outputs the level to a text block.";
                                                                                                //不将消息显示为触发器。
                                                                                                //要在 Kanzi Studio 中将消息显示为动作,请执行此代码。
                                                                                                metadata["Listenable"] = "False";
                                                                                            ));

为了注册 SpinnerUpdateLevelMessage 的消息参数,SpinnerUpdateLevelMessageArguments 必须包含定义消息参数的元类。通过使用 KZ_MESSAGE_ARGUMENTS_METACLASS_BEGIN,您定义自定义消息的参数并声明:

KZ_MESSAGE_ARGUMENTS_METACLASS_BEGIN(SpinnerUpdateLevelMessageArguments, MessageArguments, "Spinner Update Level Message Arguments")
    KZ_METACLASS_PROPERTY_TYPE(SpinnerLevelAlterationProperty)
KZ_METACLASS_END()

另请参阅

Kanzi Engine 插件

创建 Kanzi Engine 插件

扩展 Kanzi Engine 的功能

显示 Kanzi Studio 中的 Kanzi Engine 插件自定义类型的参考

示例